Region Clustering

  • Clustering regions in PL, CZ, and SE based on similarities in population and/or density and/or geographical proximity

  • Note that clustering is not done separately for SE and PL/CZ groups of countries, but this too can be done

  • Visualising clusters of regions in maps as Martin has done is probably desirable, but requires Martin's assistance, as the related package function doesn't seem to work on non-Windows OS'es like mine

1. Base Data Pull

  • List of all regions in PL, CZ, and SE was pulled; as in Martin's research project paper, regions in CZ and SE are at NUTS3 level, whereas all regions in PL are at a NUTS2 level, except the capital region which is at a NUTS1 level

  • Apart from the above-mentioned NUTS IDs, each region has the following attributes: population, area, and (geographical) centroid

In [1]:
import pandas as pd
import numpy as np
regions = pd.read_csv("./data/regions.csv")

2. Matrix of pairwise regional geographical distances

  • Note that Haversine distance has been employed here. This can of course be changed to Euclidean Distance

  • Also, the range of distances has been scaled down to [0, 1]

In [2]:
# geographical distance matrix

import haversine.haversine as haversine

centroids = dict(zip(regions.iloc[:,0], 
                     regions.iloc[:,4].apply(lambda x: [float(i) for i in x.split(',')]))) # set up

geog_dist = pd.DataFrame([[haversine(centroids[reg_row], centroids[reg_col])
                                  for reg_col in regions['NUTS3'].unique()] 
                                 for reg_row in regions['NUTS3'].unique()], 
                                columns = regions['NUTS3'].unique()).rename(
                                dict(enumerate(regions['NUTS3'].unique()))) # actual haversine distance

geog_dist = geog_dist / geog_dist.max().max() # scaled

3. Matrix of pairwise regional population dissimilarities

  • Base population dissimilarity between a pair of regions was taken as the absolute difference between their populations

  • These dissimilarities were then scaled down to [0, 1]

In [3]:
# population dissimilarity matrix

population = dict(zip(regions.iloc[:,0], regions.iloc[:,2])) # set up

pop_diss = pd.DataFrame([[abs(population[reg_row] - population[reg_col])
                                  for reg_col in regions['NUTS3'].unique()] 
                                 for reg_row in regions['NUTS3'].unique()], 
                                columns = regions['NUTS3'].unique()).rename(
                                dict(enumerate(regions['NUTS3'].unique()))) # actual pop difference

pop_diss = pop_diss / pop_diss.max().max() # scaled

4. Matrix of pairwise regional population density dissimilarities

  • Population density defined here as population per unit of area

  • Base population density dissimilarity between a pair of regions was taken as the absolute difference between their population densities

  • These dissimilarities were then scaled down to [0, 1]

In [4]:
# population density dissimilarity matrix

population_density = dict(zip(regions.iloc[:,0], regions.iloc[:,2]/regions.iloc[:,3])) # set up

pop_dens_diss = pd.DataFrame([[abs(population_density[reg_row] - population_density[reg_col])
                                  for reg_col in regions['NUTS3'].unique()] 
                                 for reg_row in regions['NUTS3'].unique()], 
                                columns = regions['NUTS3'].unique()).rename(
                                dict(enumerate(regions['NUTS3'].unique()))) # actual pop density difference

pop_dens_diss = pop_dens_diss / pop_dens_diss.max().max() # scaled

5. Adjacency Matrix

  • Built entirely using Martin's package method "location.adjacency_similarity_matrix()"
  • These dissimilarities were then scaled down to [0, 1]
In [5]:
# adjacency (dis)similarity matrix

import sys
sys.path.append("src")

import location
adj_matrix, adj_matrix_nuts = location.adjacency_similarity_matrix() # load adjacency (dis)similarity matrix

adj_matrix = pd.DataFrame(adj_matrix, columns = adj_matrix_nuts).rename(dict(enumerate(adj_matrix_nuts))) # format into pandas data frame
adj_matrix = adj_matrix.reindex(index=regions['NUTS3'].unique(), columns=regions['NUTS3'].unique()) # shuffle labels to match other matrices

adj_matrix = adj_matrix / adj_matrix.max().max() # scaled
/Users/stray/miniconda3/lib/python3.7/site-packages/sklearn/utils/__init__.py:4: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
  from collections import Sequence

6. Composite distance matrices

  • We build composite distance matrices by combining n (n >= 1) distance matrices built above

  • Specifically, for a given pair of regions, we treat the distance metric from each component distance matrix as a coordinate of an n dimensional vector and compute composite distance between the pair as the euclidean norm of this vector

In [6]:
# composite distance matrices

all_four_distances = np.sqrt(pop_diss**2 + pop_dens_diss**2 + geog_dist**2 + adj_matrix**2)
all_except_geog = np.sqrt(pop_diss**2 + pop_dens_diss**2 + adj_matrix**2)
all_except_adj = np.sqrt(pop_diss**2 + pop_dens_diss**2 + geog_dist**2)
all_except_pop = np.sqrt(adj_matrix**2 + pop_dens_diss**2 + geog_dist**2)
pop_pop_dens = np.sqrt(pop_diss**2 + pop_dens_diss**2)
pop_dens = pop_dens_diss
pop_dens_adj = np.sqrt(pop_dens_diss**2 + adj_matrix**2)
pop_dens_geog = np.sqrt(pop_dens_diss**2 + geog_dist**2)

7. Clustering using Czekanowski Diagrams

  • It seems this may be the preferred way to cluster regions in this project is to use Czekanowski Diagrams

  • So I tried to import and use the 'RMaCzek' package here in a Python environment for the job, but had issues. See error screenshot

Error Screenshot

  • Setting up environmental variables did not help either:

Environment Variables

  • So had to export data to R and to the job there. See file "czekonovsky_clustering.R"
In [7]:
# export data files to csv
all_four_distances.to_csv('./data/clustering_distance_datasets/all_four_distances.csv')
all_except_geog.to_csv('./data/clustering_distance_datasets/all_except_geog.csv')
all_except_adj.to_csv('./data/clustering_distance_datasets/all_except_adj.csv')
all_except_pop.to_csv('./data/clustering_distance_datasets/all_except_pop.csv')
pop_pop_dens.to_csv('./data/clustering_distance_datasets/pop_pop_dens.csv')
pop_dens.to_csv('./data/clustering_distance_datasets/pop_dens.csv')
pop_dens_adj.to_csv('./data/clustering_distance_datasets/pop_dens_adj.csv')
pop_dens_geog.to_csv('./data/clustering_distance_datasets/pop_dens_geog.csv')

Results from R: (Code available for tweaking)

7.1. Clustering based on composite distance using all four components (geographical, adjacency, population and population density) with 'n_class = 6':

All Four

Cluster Members
  • Cluster 1: CZ010 - Singleton
  • Cluster 2: PL9, PL22, PL21, PL82, PL72, PL81, PL84, PL71 - 8 members
  • Cluster 3: PL62, PL61, PL63, PL42, PL43, PL41, PL51 - 7 members
  • Cluster 4: PL52, CZ080, CZ072, CZ071, CZ053, CZ064, CZ063, CZ031, CZ032, CZ041, CZ042, CZ020, CZ052, CZ051 - 14 members
  • Cluster 5: SE224, SE221, SE212, SE213, SE211, SE231 - 6 members
  • Cluster 6: SE214, SE110, SE121, SE125, SE122, SE123, SE232, SE311, SE124, SE312, SE313, SE322, SE321, SE331, SE332 - 15 members
Cluster Member Composition by Country
  • Cluster 1: CZ - 100%, PL - 0%, SE - 0%, n = 1
  • Cluster 2: CZ - 0%, PL - 100%, SE - 0%, n = 8
  • Cluster 3: CZ - 0%, PL - 100%, SE - 0%, n = 7
  • Cluster 4: CZ - 93%, PL - 7%, SE - 0%, n = 14
  • Cluster 5: CZ - 0%, PL - 0%, SE - 100%, n = 6
  • Cluster 6: CZ - 0%, PL - 0%, SE - 100%, n = 15

7.2. Clustering based on composite distance using three components viz. adjacency, population and population density with 'n_class = 6':

All Four except Euclidean Geographical Distance

Cluster Members
  • Cluster 1: CZ010 - Singleton
  • Cluster 2: PL9, PL22, PL21, PL82, PL72, PL81 - 6 members
  • Cluster 3: PL84, PL62, PL63, PL61, PL71, PL41, PL42, PL43, PL51, PL52 - 10 members
  • Cluster 4: CZ080, CZ072, CZ071, CZ053, CZ064, CZ063, CZ031, CZ032, CZ041, CZ042, CZ020, CZ052, CZ051 - 13 members
  • Cluster 5: SE214, SE332, SE331, SE321, SE322, SE313, SE312, SE125, SE121, SE122, SE110 - 11 members
  • Cluster 6: SE123, SE124, SE311, SE232, SE231, SE211, SE213, SE212, SE221, SE224 - 10 members
Cluster Member Composition by Country
  • Cluster 1: CZ - 100%, PL - 0%, SE - 0%, n = 1
  • Cluster 2: CZ - 0%, PL - 100%, SE - 0%, n = 6
  • Cluster 3: CZ - 0%, PL - 100%, SE - 0%, n = 10
  • Cluster 4: CZ - 100%, PL - 0%, SE - 0%, n = 13
  • Cluster 5: CZ - 0%, PL - 0%, SE - 100%, n = 11
  • Cluster 6: CZ - 0%, PL - 0%, SE - 100%, n = 10

7.3. Clustering based on composite distance using three components viz. geographical, population and population density with 'n_class = 6':

All Four except Adjacency Matriix

Cluster Members
  • Cluster 1: SE332, SE331, SE322, SE321 - 4 members
  • Cluster 2: SE313, SE312, SE311, SE121, SE125, SE124, SE122, SE123, SE214, SE213, SE211, SE212, SE231, SE221 - 14 members
  • Cluster 3: SE224, SE232, SE110 - 3 members
  • Cluster 4: PL63, PL61, PL84, PL62, PL42 - 5 members
  • Cluster 5: PL43, CZ042, CZ051, CZ052, CZ071, CZ072, CZ053, CZ063, CZ031, CZ032, CZ041, CZ020, CZ064, CZ080, PL52, PL72 - 16 members
  • Cluster 6: PL82, PL81, PL71, PL51, PL41, PL21, PL22, PL9, CZ010 - 9 members
Cluster Member Composition by Country
  • Cluster 1: CZ - 0%, PL - 0%, SE - 100%, n = 4
  • Cluster 2: CZ - 0%, PL - 0%, SE - 100%, n = 14
  • Cluster 3: CZ - 0%, PL - 0%, SE - 100%, n = 3
  • Cluster 4: CZ - 0%, PL - 100%, SE - 0%, n = 5
  • Cluster 5: CZ - 81%, PL - 19%, SE - 0%, n = 16
  • Cluster 6: CZ - 11%, PL - 89%, SE - 0%, n = 9

7.4. Clustering based on composite distance using three components viz. geographical, adjacency and population density with 'n_class = 6':

All Four except Population

Cluster Members
  • Cluster 1: CZ010 - Singleton
  • Cluster 2: SE332, SE331, SE321, SE322, SE313, SE312, SE125, SE121, SE110, SE122, SE124 - 11 members
  • Cluster 3: SE311, SE232, SE123, SE214, SE231, SE211, SE213, SE212, SE221, SE224 - 10 members
  • Cluster 4: CZ041, CZ042, CZ032, CZ031, CZ063, CZ064, CZ053, CZ020, CZ051, CZ052 - 10 members
  • Cluster 5: PL51, CZ071, CZ072, CZ080, PL52, PL22, PL21, PL82, PL72, PL81, PL84, PL9 - 12 members
  • Cluster 6: PL71, PL62, PL61, PL63, PL42, PL43, PL41 - 7 members
Cluster Member Composition by Country
  • Cluster 1: CZ - 100%, PL - 0%, SE - 0%, n = 1
  • Cluster 2: CZ - 0%, PL - 0%, SE - 100%, n = 11
  • Cluster 3: CZ - 0%, PL - 0%, SE - 100%, n = 10
  • Cluster 4: CZ - 0%, PL - 100%, SE - 0%, n = 10
  • Cluster 5: CZ - 25%, PL - 75%, SE - 0%, n = 12
  • Cluster 6: CZ - 0%, PL - 100%, SE - 0%, n = 7

7.5. Clustering based on composite distance using two components viz. population and population density with 'n_class = 6':

Population and Population Density

Cluster Members
  • Cluster 1: SE214, SE322, SE221, SE212, SE213, SE321, SE332, SE331, SE312, SE311, SE313, SE124, SE122, SE125, CZ041, SE231, SE211, SE121 - 18 members
  • Cluster 2: SE123, CZ051, CZ063, CZ053, CZ052, CZ032, CZ031, CZ072, CZ071 - 9 members
  • Cluster 3: CZ042, PL52, PL43, PL84, CZ064, PL72, CZ080, CZ020, SE224, PL62, PL42, SE232 - 12 members
  • Cluster 4: PL61, PL82, PL81, PL63, PL71, SE110 - 6 members
  • Cluster 5: PL51, PL21, PL41, PL22, PL9 - 5 members
  • Cluster 6: CZ010 - Singleton
Cluster Member Composition by Country
  • Cluster 1: CZ - 6%, PL - 0%, SE - 94%, n = 18
  • Cluster 2: CZ - 89%, PL - 0%, SE - 11%, n = 9
  • Cluster 3: CZ - 33%, PL - 50%, SE - 17%, n = 12
  • Cluster 4: CZ - 0%, PL - 83%, SE - 17%, n = 6
  • Cluster 5: CZ - 0%, PL - 100%, SE - 0%, n = 5
  • Cluster 6: CZ - 100%, PL - 0%, SE - 0%, n = 1

7.6. Clustering based on population density alone, with 'n_class = 6':

Population Density Alone

Cluster Members
  • Cluster 1: CZ010 - Singleton
  • Cluster 2: PL22, SE110, CZ080, PL21 - 4 members
  • Cluster 3: CZ064, CZ042, PL9, CZ072, PL51, CZ051, PL71 - 7 members
  • Cluster 4: PL63, SE224, CZ071, CZ020, PL82, PL41, PL61, CZ052, CZ053, PL72, PL52 - 11 members
  • Cluster 5: CZ041, PL81, CZ032, CZ063, PL42, PL43, SE232, CZ031, SE231, PL62, PL84, SE221, SE125, SE122, SE121, SE123 - 16 members
  • Cluster 6: SE124, SE211, SE212, SE213, SE214, SE311, SE313, SE321, SE312, SE331, SE322, SE332 - 12 members
Cluster Member Composition by Country
  • Cluster 1: CZ - 100%, PL - 0%, SE - 0%, n = 1
  • Cluster 2: CZ - 25%, PL - 50%, SE - 25%, n = 4
  • Cluster 3: CZ - 57%, PL - 43%, SE - 0%, n = 7
  • Cluster 4: CZ - 36%, PL - 55%, SE - 9%, n = 11
  • Cluster 5: CZ - 25%, PL - 31%, SE - 44%, n = 16
  • Cluster 6: CZ - 0%, PL - 0%, SE - 100%, n = 12

7.7. Clustering based on composite distance using two components viz. population density and adjacency with 'n_class = 6':

Population Density and Adjacency

Cluster Members
  • Cluster 1: CZ010 - Singleton
  • Cluster 2: CZ020, CZ052, CZ051, CZ042, CZ041, CZ032, CZ031, CZ063, CZ064, CZ053, CZ071, CZ072, CZ080 - 13 members
  • Cluster 3: PL22, PL52, PL51, PL43, PL42, PL41, PL63, PL61 - 8 members
  • Cluster 4: PL62, PL71, PL9, PL84, PL81, PL72, PL82, PL21 - 8 members
  • Cluster 5: SE214, SE332, SE331, SE321, SE322, SE313, SE312, SE125, SE121, SE110, SE122, SE124, SE311 - 13 members
  • Cluster 6: SE232, SE123, SE211, SE231, SE224, SE221, SE212, SE213 - 8 members
Cluster Member Composition by Country
  • Cluster 1: CZ - 100%, PL - 0%, SE - 0%, n = 1
  • Cluster 2: CZ - 100%, PL - 0%, SE - 0%, n = 13
  • Cluster 3: CZ - 0%, PL - 100%, SE - 0%, n = 8
  • Cluster 4: CZ - 0%, PL - 100%, SE - 0%, n = 8
  • Cluster 5: CZ - 0%, PL - 0%, SE - 100%, n = 13
  • Cluster 6: CZ - 0%, PL - 0%, SE - 100%, n = 8

7.8. Clustering based on composite distance using two components viz. population density and geographical distance with 'n_class = 6':

Population Density and Geographic Distance

Cluster Members
  • Cluster 1: CZ010 - Singleton
  • Cluster 2: SE332, SE331, SE322, SE321 - 4 members
  • Cluster 3: SE313, SE312, SE311, SE121, SE125, SE124, SE122, SE110 - 8 members
  • Cluster 4: SE123, SE232, SE211, SE231, SE212, SE213, SE214, SE221, SE224 - 9 members
  • Cluster 5: PL63, PL42, PL43, PL41, PL61, PL62, PL84, PL81, PL82, PL21, PL22, PL72, PL9, PL71 - 14 members
  • Cluster 6: PL52, PL51, CZ051, CZ052, CZ053, CZ080, CZ071, CZ072, CZ064, CZ063, CZ020, CZ031, CZ032, CZ041, CZ042 - 15 members
Cluster Member Composition by Country
  • Cluster 1: CZ - 100%, PL - 0%, SE - 0%, n = 1
  • Cluster 2: CZ - 0%, PL - 0%, SE - 100%, n = 4
  • Cluster 3: CZ - 0%, PL - 0%, SE - 100%, n = 8
  • Cluster 4: CZ - 0%, PL - 0%, SE - 100%, n = 9
  • Cluster 5: CZ - 0%, PL - 100%, SE - 0%, n = 14
  • Cluster 6: CZ - 87%, PL - 13%, SE - 100%, n = 15

8. Hierarchical Clustering using Distance Heatmaps

8.1. Clustering based on composite distance using all four components (geographical, adjacency, population and population density) with 'n_class = 6':

In [8]:
import seaborn as sns
sns.clustermap(all_four_distances, xticklabels = True, yticklabels = True, figsize = (10, 10))
/Users/stray/miniconda3/lib/python3.7/site-packages/seaborn/matrix.py:603: ClusterWarning: scipy.cluster: The symmetric non-negative hollow observation matrix looks suspiciously like an uncondensed distance matrix
  metric=self.metric)
Out[8]:
<seaborn.matrix.ClusterGrid at 0x7fe97c1cd590>

8.2. Clustering based on composite distance using three components viz. adjacency, population and population density with 'n_class = 6':

In [9]:
sns.clustermap(all_except_geog, xticklabels = True, yticklabels = True, figsize = (10, 10))
Out[9]:
<seaborn.matrix.ClusterGrid at 0x7fe9773acf90>

8.3. Clustering based on composite distance using three components viz. geographical distance, population and population density with 'n_class = 6':

In [10]:
sns.clustermap(all_except_adj, xticklabels = True, yticklabels = True, figsize = (10, 10))
Out[10]:
<seaborn.matrix.ClusterGrid at 0x7fe97cba8350>

8.4. Clustering based on composite distance using three components viz. geographical distance, adjacency and population density with 'n_class = 6':

In [11]:
sns.clustermap(all_except_pop, xticklabels = True, yticklabels = True, figsize = (10, 10))
Out[11]:
<seaborn.matrix.ClusterGrid at 0x7fe97d78ffd0>

8.5. Clustering based on composite distance using two components viz. population and population density with 'n_class = 6':

In [12]:
sns.clustermap(pop_pop_dens, xticklabels = True, yticklabels = True, figsize = (10, 10))
Out[12]:
<seaborn.matrix.ClusterGrid at 0x7fe97d7c0550>

8.6. Clustering based on population density, with 'n_class = 6':

In [13]:
sns.clustermap(pop_dens, xticklabels = True, yticklabels = True, figsize = (10, 10))
Out[13]:
<seaborn.matrix.ClusterGrid at 0x7fe97d0a4cd0>

8.7. Clustering based on composite distance using two components viz. adjacency and population density with 'n_class = 6':

In [14]:
sns.clustermap(pop_dens_adj, xticklabels = True, yticklabels = True, figsize = (10, 10))
Out[14]:
<seaborn.matrix.ClusterGrid at 0x7fe97ed48c10>

8.8. Clustering based on composite distance using two components viz. geographical distance and population density with 'n_class = 6':

In [15]:
sns.clustermap(pop_dens_geog, xticklabels = True, yticklabels = True, figsize = (10, 10))
Out[15]:
<seaborn.matrix.ClusterGrid at 0x7fe97f338610>

9. Spectral Clustering

NOTE: There seems to be some bug in sklearn.cluster.SpectralClustering, which gets trigerred when using any other composite distance matrices developed other than the two below

9.1. Clustering based on composite distance using two components (population and population density) with 'n_class = 6':

In [16]:
from sklearn.cluster import SpectralClustering

spectral_pop_pop_dens = SpectralClustering(n_clusters=6, assign_labels="discretize",
        random_state=0, affinity = 'precomputed').fit(1 - pop_pop_dens)

spectral_pop_pop_dens = pd.DataFrame(zip(regions['NUTS3'], spectral_pop_pop_dens.labels_), 
                                     columns = ["NUTS3","Cluster"])
/Users/stray/miniconda3/lib/python3.7/site-packages/sklearn/model_selection/_split.py:18: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
  from collections import Iterable
/Users/stray/miniconda3/lib/python3.7/site-packages/sklearn/model_selection/_search.py:16: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
  from collections import Mapping, namedtuple, defaultdict, Sequence
In [17]:
spectral_pop_pop_dens
Out[17]:
NUTS3 Cluster
0 CZ010 3
1 CZ020 0
2 CZ031 5
3 CZ032 5
4 CZ041 2
5 CZ042 5
6 CZ051 5
7 CZ052 5
8 CZ053 5
9 CZ063 5
10 CZ064 0
11 CZ071 5
12 CZ072 5
13 CZ080 0
14 PL21 1
15 PL22 1
16 PL41 1
17 PL42 4
18 PL43 0
19 PL51 1
20 PL52 0
21 PL61 4
22 PL62 0
23 PL63 4
24 PL71 4
25 PL72 0
26 PL81 4
27 PL82 4
28 PL84 0
29 PL9 1
30 SE110 3
31 SE121 2
32 SE122 2
33 SE123 5
34 SE124 2
35 SE125 2
36 SE211 2
37 SE212 2
38 SE213 2
39 SE214 2
40 SE221 2
41 SE224 0
42 SE231 2
43 SE232 4
44 SE311 2
45 SE312 2
46 SE313 2
47 SE321 2
48 SE322 2
49 SE331 2
50 SE332 2

9.2. Clustering based on population density alone, with 'n_class = 6':

In [18]:
spectral_pop_dens = SpectralClustering(n_clusters=6, assign_labels="discretize",
        random_state=0, affinity = 'precomputed').fit(1 - pop_dens)

spectral_pop_dens = pd.DataFrame(zip(regions['NUTS3'], spectral_pop_dens.labels_), 
                                     columns = ["NUTS3","Cluster"])
In [19]:
spectral_pop_dens
Out[19]:
NUTS3 Cluster
0 CZ010 4
1 CZ020 0
2 CZ031 2
3 CZ032 5
4 CZ041 5
5 CZ042 3
6 CZ051 3
7 CZ052 0
8 CZ053 0
9 CZ063 5
10 CZ064 3
11 CZ071 0
12 CZ072 3
13 CZ080 3
14 PL21 3
15 PL22 4
16 PL41 0
17 PL42 5
18 PL43 5
19 PL51 3
20 PL52 0
21 PL61 0
22 PL62 2
23 PL63 0
24 PL71 3
25 PL72 0
26 PL81 5
27 PL82 0
28 PL84 2
29 PL9 3
30 SE110 4
31 SE121 2
32 SE122 2
33 SE123 2
34 SE124 2
35 SE125 2
36 SE211 2
37 SE212 1
38 SE213 1
39 SE214 1
40 SE221 2
41 SE224 0
42 SE231 2
43 SE232 5
44 SE311 1
45 SE312 1
46 SE313 1
47 SE321 1
48 SE322 1
49 SE331 1
50 SE332 1

10. Appendix

10.1. NUTS labels used (graphical form)

  • Graphics copy pasted from Martin's report

CS PL NUTS

SE NUTS

10.2. NUTS labels used (tabular form)

In [20]:
regions
Out[20]:
NUTS3 name population area centroid
0 CZ010 Prague 1267449 496.1 50.0663,14.463
1 CZ020 Central Bohemian 1326876 11016.1 49.7423,14.4549
2 CZ031 South Bohemian 637834 10058.0 49.1031,14.4121
3 CZ032 Plzeň 576616 7561.0 49.5984,13.2182
4 CZ041 Karlovy Vary 297828 3314.3 50.1699,12.7187
5 CZ042 Ústí nad Labem 822826 5334.6 50.5298,13.839
6 CZ051 Liberec 439639 3163.4 50.7347,14.9746
7 CZ052 Hradec Králové 551421 4759.0 50.3898,15.857
8 CZ053 Pardubice 516149 4518.9 49.8748,16.5068
9 CZ063 Vysočina 509475 6795.6 49.4183,15.679
10 CZ064 South Moravian 1175025 7195.1 49.0775,16.6376
11 CZ071 Olomouc 634718 5266.9 49.6093,17.3605
12 CZ072 Zlín 584676 3963.0 49.2254,17.7414
13 CZ080 Moravian-Silesian 1213311 5427.6 49.8029,18.0098
14 PL21 Małopolskie 3372618 15183.0 49.8534,20.269
15 PL22 Śląskie 4570849 12333.0 50.3338,19.0098
16 PL41 Wielkopolskie 3475323 29826.0 52.4977,16.6724\t
17 PL42 Zachodniopomorskie 1710482 22892.0 53.5694,15.5715
18 PL43 Lubuskie 1018075 13988.0 52.1704,15.3339
19 PL51 Dolnośląskie 2904207 19947.0 51.0982,16.4117
20 PL52 Opolskie 996011 9412.0 50.6548,17.9145
21 PL61 Kujawsko-Pomorskie 2086210 17972.0 53.08,18.5077
22 PL62 Warmińsko-Mazurskie 1439675 24173.0 53.8611,20.8301
23 PL63 Pomorskie 2307710 18310.0 54.2886,18.0655
24 PL71 Łódzkie 2493603 18219.0 51.6087,19.4079
25 PL72 Świętokrzyskie 1257179 11711.0 50.7667,20.7865
26 PL81 Lubelskie 2139726 25122.0 51.2295,22.888
27 PL82 Podkarpackie 2127657 17846.0 49.9638,22.1554
28 PL84 Podlaskie 1188800 20187.0 53.2669,22.9446
29 PL9 Mazowieckie 5349114 35558.0 52.3675,21.0921
30 SE110 Stockholm 2377081 6514.0 59.35150,17.74350
31 SE121 Uppsala 383713 8189.0 60.04120,17.54590
32 SE122 Södermanland 297540 6072.0 59.06910,16.70340
33 SE123 Östergötland 465495 10557.0 58.36420,15.65170
34 SE124 Örebro 304805 8504.0 59.36330,14.97160
35 SE125 Västmanland 275845 5117.0 59.74540,16.17190
36 SE211 Jönköping 363599 10436.0 57.53650,14.41160
37 SE212 Kronoberg 201469 8423.0 56.77390,14.56140
38 SE213 Kalmar 245446 11160.0 57.23580,16.05680
39 SE214 Gotland 59686 3134.0 57.50660,18.51150
40 SE221 Blekinge 159606 2931.0 56.28970,15.21310
41 SE224 Skåne 1377827 10965.0 55.96180,13.62790
42 SE231 Halland 333848 5427.0 56.93960,12.87330
43 SE232 Västra Götaland 1725881 23800.0 57.98860,12.99330
44 SE311 Värmland 282414 17519.0 59.78610,13.16910
45 SE312 Dalarna 287966 28030.0 60.96630,14.35220
46 SE313 Gävleborg 287382 18113.0 61.44090,16.32560
47 SE321 Västernorrland 245347 21549.0 63.10440,17.26550
48 SE322 Jämtland 130810 48935.0 63.26190,14.29750
49 SE331 Västerbotten 271736 54664.0 64.86600,17.79420
50 SE332 Norrbotten 250093 97242.0 66.94630,20.05990